package com.frank.stock4j.tusharepro;

import com.frank.stock4j.tusharepro.bean.*;
import com.frank.stock4j.tusharepro.entity.*;
import com.frank.stock4j.tusharepro.http.Client;
import com.frank.stock4j.tusharepro.http.Request;
import com.frank.stock4j.tusharepro.request.*;
import org.springframework.stereotype.Service;
import lombok.SneakyThrows;

import java.io.IOException;
import java.util.List;

@Service
public class TushareProService {
    /*
     * 申万行业分类
     * 描述：获取申万行业分类，包括申万28个一级分类，104个二级分类，227个三级分类的列表信息
     */
    @SneakyThrows
    public List<IndexClassifyEntity> indexClassify(IndexClassifyRequest request) {
        return Client.beanList(request);
    }

    /*
     * 公募基金列表
     * 描述：获取公募基金数据列表，包括场内和场外基金
     */
    @SneakyThrows
    public List<FundBasicEntity> fundBasic(FundBasicRequest request) {
        return Client.beanList(request);
    }

    /*
     * 股票曾用名
     * 描述：历史名称变更记录
     */
    @SneakyThrows
    public List<NamechangeEntity> namechange(NamechangeRequest request) {
        return Client.beanList(request);
    }

    /*
     * 仓单日报
     * 描述：获取仓单日报数据，了解各仓库/厂库的仓单变化
     */
    @SneakyThrows
    public List<FutWsrEntity> futWsr(FutWsrRequest request) {
        return Client.beanList(request);
    }

    /*
     * 结算参数
     * 描述：获取每日结算参数数据，包括交易和交割费率等
     */
    @SneakyThrows
    public List<FutSettleEntity> futSettle(FutSettleRequest request) {
        return Client.beanList(request);
    }

    /*
     * 股票列表
     * 描述：获取基础信息数据，包括股票代码、名称、上市日期、退市日期等
     */
    @SneakyThrows
    public List<StockBasicEntity> stockBasic(StockBasicRequest request) {
        return Client.beanList(request);
    }

    /*
     * 周线行情
     * 描述：获取A股周线行情
     */
    @SneakyThrows
    public List<WeeklyEntity> weekly(WeeklyRequest request) {
        return Client.beanList(request);
    }

    /*
     * 交易日历
     * 描述：获取各大交易所交易日历数据,默认提取的是上交所
     */
    @SneakyThrows
    public List<TradeCalEntity> tradeCal(TradeCalRequest request) {
        return Client.beanList(request);
    }

    /*
     * 月线行情
     * 描述：获取A股月线数据
     */
    @SneakyThrows
    public List<MonthlyEntity> monthly(MonthlyRequest request) {
        return Client.beanList(request);
    }

    /*
     * 日线行情
     * 数据说明：交易日每天15点～16点之间。本接口是未复权行情，停牌期间不提供数据。
     */
    @SneakyThrows
    public List<DailyEntity> daily(DailyRequest request) {
        return Client.beanList(request);
    }

    /*
     * 复权因子
     * 更新时间：早上9点30分
     */
    @SneakyThrows
    public List<AdjFactorEntity> adjFactor(AdjFactorRequest request) {
        return Client.beanList(request);
    }

    /*
     * 停复牌信息
     * 更新时间：不定期
     */
    @SneakyThrows
    public List<SuspendEntity> suspend(SuspendRequest request) {
        return Client.beanList(request);
    }

    /*
     * 每日指标
     * 更新时间：交易日每日15点～17点之间
     */
    @SneakyThrows
    public List<DailyBasicEntity> dailyBasic(DailyBasicRequest request) {
        return Client.beanList(request);
    }

    /*
     * 利润表
     * 描述：获取上市公司财务利润表数据
     */
    @SneakyThrows
    public List<IncomeEntity> income(IncomeRequest request) {
        return Client.beanList(request);
    }

    /*
     * 南华期货指数日线行情
     * 描述：获取南华指数每日行情，指数行情也可以通过
     */
    @SneakyThrows
    public List<IndexDailyEntity> indexDaily(IndexDailyRequest request) {
        return Client.beanList(request);
    }

    /*
     * 资产负债表
     * 描述：获取上市公司资产负债表
     */
    @SneakyThrows
    public List<BalancesheetEntity> balancesheet(BalancesheetRequest request) {
        return Client.beanList(request);
    }

    /*
     * 期权合约信息
     * 描述：获取期权合约信息
     */
    @SneakyThrows
    public List<OptBasicEntity> optBasic(OptBasicRequest request) {
        return Client.beanList(request);
    }

    /*
     * 期权日线行情
     * 描述：获取期权日线行情
     */
    @SneakyThrows
    public List<OptDailyEntity> optDaily(OptDailyRequest request) {
        return Client.beanList(request);
    }

    /*
     * 限售股解禁
     * 描述：获取限售股解禁
     */
    @SneakyThrows
    public List<ShareFloatEntity> shareFloat(ShareFloatRequest request) {
        return Client.beanList(request);
    }

    /*
     * 大宗交易
     * 描述：大宗交易
     */
    @SneakyThrows
    public List<BlockTradeEntity> blockTrade(BlockTradeRequest request) {
        return Client.beanList(request);
    }

    /*
     * 财报披露计划
     * 描述：获取财报披露计划日期
     */
    @SneakyThrows
    public List<DisclosureDateEntity> disclosureDate(DisclosureDateRequest request) {
        return Client.beanList(request);
    }

    /*
     * 股票账户开户数据
     * 描述：获取股票账户开户数据，统计周期为一周
     */
    @SneakyThrows
    public List<StkAccountEntity> stkAccount(StkAccountRequest request) {
        return Client.beanList(request);
    }

    /*
     * 股票账户开户数据（旧）
     * 描述：获取股票账户开户数据旧版格式数据，数据从2008年1月开始，到2015年5月29，新数据请通过
     */
    @SneakyThrows
    public List<StkAccountOldEntity> stkAccountOld(StkAccountOldRequest request) {
        return Client.beanList(request);
    }

    /*
     * 股东人数
     * 描述：获取上市公司股东户数数据，数据不定期公布
     */
    @SneakyThrows
    public List<StkHoldernumberEntity> stkHoldernumber(StkHoldernumberRequest request) {
        return Client.beanList(request);
    }

    /*
     * 个股资金流向
     * 描述：获取沪深A股票资金流向数据，分析大单小单成交情况，用于判别资金动向
     */
    @SneakyThrows
    public List<MoneyflowEntity> moneyflow(MoneyflowRequest request) {
        return Client.beanList(request);
    }

    /*
     * 现金流量表
     * 描述：获取上市公司现金流量表
     */
    @SneakyThrows
    public List<CashflowEntity> cashflow(CashflowRequest request) {
        return Client.beanList(request);
    }

    /*
     * 指数周线行情
     * 描述：获取指数周线行情
     */
    @SneakyThrows
    public List<IndexWeeklyEntity> indexWeekly(IndexWeeklyRequest request) {
        return Client.beanList(request);
    }

    /*
     * 指数月线行情
     * 描述：获取指数月线行情,每月更新一次
     */
    @SneakyThrows
    public List<IndexMonthlyEntity> indexMonthly(IndexMonthlyRequest request) {
        return Client.beanList(request);
    }

    /*
     * 股东增减持
     * 描述：获取上市公司增减持数据，了解重要股东近期及历史上的股份增减变化
     */
    @SneakyThrows
    public List<StkHoldertradeEntity> stkHoldertrade(StkHoldertradeRequest request) {
        return Client.beanList(request);
    }

    /*
     * 业绩预告
     * 描述：获取业绩预告数据
     */
    @SneakyThrows
    public List<ForecastEntity> forecast(ForecastRequest request) {
        return Client.beanList(request);
    }

    /*
     * 上市公司公告(信息地雷)
     * 描述：获取上市公司公告数据及原文文本，数据从2000年开始，内容很大，请注意数据调取节奏。
     */
    @SneakyThrows
    public List<AnnsEntity> anns(AnnsRequest request) {
        return Client.beanList(request);
    }

    /*
     * 业绩快报
     * 描述：获取上市公司业绩快报
     */
    @SneakyThrows
    public List<ExpressEntity> express(ExpressRequest request) {
        return Client.beanList(request);
    }

    /*
     * 外汇基础信息（海外）
     * 描述：获取海外外汇基础信息，目前只有FXCM交易商的数据
     */
    @SneakyThrows
    public List<FxObasicEntity> fxObasic(FxObasicRequest request) {
        return Client.beanList(request);
    }

    /*
     * 外汇日线行情
     * 描述：获取外汇日线行情
     */
    @SneakyThrows
    public List<FxDailyEntity> fxDaily(FxDailyRequest request) {
        return Client.beanList(request);
    }

    /*
     * 沪深港通资金流向
     * 描述：获取沪股通、深股通、港股通每日资金流向数据，每次最多返回300条记录，总量不限制。
     */
    @SneakyThrows
    public List<MoneyflowHsgtEntity> moneyflowHsgt(MoneyflowHsgtRequest request) {
        return Client.beanList(request);
    }

    /*
     * 沪深股通十大成交股
     * 描述：获取沪股通、深股通每日前十大成交详细数据
     */
    @SneakyThrows
    public List<HsgtTop10Entity> hsgtTop10(HsgtTop10Request request) {
        return Client.beanList(request);
    }

    /*
     * 港股通十大成交股
     * 描述：获取港股通每日成交数据，其中包括沪市、深市详细数据
     */
    @SneakyThrows
    public List<GgtTop10Entity> ggtTop10(GgtTop10Request request) {
        return Client.beanList(request);
    }

    /*
     * 申万行业成分构成
     * 描述：申万行业成分
     */
    @SneakyThrows
    public List<IndexMemberEntity> indexMember(IndexMemberRequest request) {
        return Client.beanList(request);
    }

    /*
     * 每日涨跌停价格
     * 描述：获取全市场（包含A/B股和基金）每日涨跌停价格，包括涨停价格，跌停价格等，每个交易日8点40左右更新当日股票涨跌停价格。
     */
    @SneakyThrows
    public List<StkLimitEntity> stkLimit(StkLimitRequest request) {
        return Client.beanList(request);
    }

    /*
     * 可转债基本信息
     * 描述：获取可转债基本信息
     */
    @SneakyThrows
    public List<CbBasicEntity> cbBasic(CbBasicRequest request) {
        return Client.beanList(request);
    }

    /*
     * 融资融券交易汇总
     * 描述：获取融资融券每日交易汇总数据
     */
    @SneakyThrows
    public List<MarginEntity> margin(MarginRequest request) {
        return Client.beanList(request);
    }

    /*
     * 融资融券交易明细
     * 描述：获取沪深两市每日融资融券明细
     */
    @SneakyThrows
    public List<MarginDetailEntity> marginDetail(MarginDetailRequest request) {
        return Client.beanList(request);
    }

    /*
     * 可转债发行
     * 描述：获取可转债发行数据
     */
    @SneakyThrows
    public List<CbIssueEntity> cbIssue(CbIssueRequest request) {
        return Client.beanList(request);
    }

    /*
     * 前十大股东
     * 描述：获取上市公司前十大股东数据，包括持有数量和比例等信息。
     */
    @SneakyThrows
    public List<Top10HoldersEntity> top10Holders(Top10HoldersRequest request) {
        return Client.beanList(request);
    }

    /*
     * 前十大流通股东
     * 描述：获取上市公司前十大流通股东数据。
     */
    @SneakyThrows
    public List<Top10FloatholdersEntity> top10Floatholders(Top10FloatholdersRequest request) {
        return Client.beanList(request);
    }

    /*
     * 可转债行情
     * 描述：获取可转债行情
     */
    @SneakyThrows
    public List<CbDailyEntity> cbDaily(CbDailyRequest request) {
        return Client.beanList(request);
    }

    /*
     * 沪深港股通持股明细
     * 描述：获取沪深港股通持股明细，数据来源港交所。
     */
    @SneakyThrows
    public List<HkHoldEntity> hkHold(HkHoldRequest request) {
        return Client.beanList(request);
    }

    /*
     * 期货主力与连续合约
     * 描述：获取期货主力（或连续）合约与月合约映射数据
     */
    @SneakyThrows
    public List<FutMappingEntity> futMapping(FutMappingRequest request) {
        return Client.beanList(request);
    }

    /*
     * 港股列表
     * 描述：获取港股列表信息
     */
    @SneakyThrows
    public List<HkBasicEntity> hkBasic(HkBasicRequest request) {
        return Client.beanList(request);
    }

    /*
     * 港股行情
     * 描述：获取港股每日增量和历史行情
     */
    @SneakyThrows
    public List<HkDailyEntity> hkDaily(HkDailyRequest request) {
        return Client.beanList(request);
    }

    /*
     * 财务指标数据
     * 描述：获取上市公司财务指标数据，为避免服务器压力，现阶段每次请求最多返回60条记录，可通过设置日期多次请求获取更多数据。
     */
    @SneakyThrows
    public List<FinaIndicatorEntity> finaIndicator(FinaIndicatorRequest request) {
        return Client.beanList(request);
    }

    /*
     * 上市公司管理层
     * 描述：获取上市公司管理层
     */
    @SneakyThrows
    public List<StkManagersEntity> stkManagers(StkManagersRequest request) {
        return Client.beanList(request);
    }

    /*
     * 管理层薪酬和持股
     * 描述：获取上市公司管理层薪酬和持股
     */
    @SneakyThrows
    public List<StkRewardsEntity> stkRewards(StkRewardsRequest request) {
        return Client.beanList(request);
    }

    /*
     * 港股通每日成交统计
     * 描述：获取港股通每日成交信息，数据从2014年开始
     */
    @SneakyThrows
    public List<GgtDailyEntity> ggtDaily(GgtDailyRequest request) {
        return Client.beanList(request);
    }

    /*
     * 港股通每月成交统计
     * 描述：港股通每月成交信息，数据从2014年开始
     */
    @SneakyThrows
    public List<GgtMonthlyEntity> ggtMonthly(GgtMonthlyRequest request) {
        return Client.beanList(request);
    }

    /*
     * 每日涨跌停统计
     * 描述：获取每日涨跌停股票统计，包括封闭时间和打开次数等数据，帮助用户快速定位近期强（弱）势股，以及研究超短线策略。
     */
    @SneakyThrows
    public List<LimitListEntity> limitList(LimitListRequest request) {
        return Client.beanList(request);
    }

    /*
     * 基金复权因子
     * 描述：获取基金复权因子，用于计算基金复权行情
     */
    @SneakyThrows
    public List<FundAdjEntity> fundAdj(FundAdjRequest request) {
        return Client.beanList(request);
    }

    /*
     * 财务审计意见
     * 描述：获取上市公司定期财务审计意见数据
     */
    @SneakyThrows
    public List<FinaAuditEntity> finaAudit(FinaAuditRequest request) {
        return Client.beanList(request);
    }

    /*
     * 基金规模数据
     * 描述：获取基金规模数据，包含上海和深圳ETF基金
     */
    @SneakyThrows
    public List<FundShareEntity> fundShare(FundShareRequest request) {
        return Client.beanList(request);
    }

    /*
     * 基金经理
     * 描述：获取公募基金经理数据，包括基金经理简历等数据
     */
    @SneakyThrows
    public List<FundManagerEntity> fundManager(FundManagerRequest request) {
        return Client.beanList(request);
    }

    /*
     * 主营业务构成
     * 描述：获得上市公司主营业务构成，分地区和产品两种方式
     */
    @SneakyThrows
    public List<FinaMainbzEntity> finaMainbz(FinaMainbzRequest request) {
        return Client.beanList(request);
    }

    /*
     * 国际指数
     * 描述：获取国际主要指数日线行情
     */
    @SneakyThrows
    public List<IndexGlobalEntity> indexGlobal(IndexGlobalRequest request) {
        return Client.beanList(request);
    }

    /*
     * 每日停复牌信息
     * 更新时间：不定期
     */
    @SneakyThrows
    public List<SuspendDEntity> suspendd(SuspendDRequest request) {
        return Client.beanList(request);
    }

    /*
     * 市场交易统计
     * 描述：获取交易所股票交易统计，包括各板块明细
     */
    @SneakyThrows
    public List<DailyInfoEntity> dailyInfo(DailyInfoRequest request) {
        return Client.beanList(request);
    }

    /*
     * 指数基本信息
     * 描述：获取指数基础信息。
     */
    @SneakyThrows
    public List<IndexBasicEntity> indexBasic(IndexBasicRequest request) {
        return Client.beanList(request);
    }

    /*
     * 期货主要品种交易周报
     * 描述：获取期货交易所主要品种每周交易统计信息，数据从2010年3月开始
     */
    @SneakyThrows
    public List<FutWeeklyDetailEntity> futWeeklyDetail(FutWeeklyDetailRequest request) {
        return Client.beanList(request);
    }

    /*
     * 指数成分和权重
     * 描述：获取各类指数成分和权重，
     */
    @SneakyThrows
    public List<IndexWeightEntity> indexWeight(IndexWeightRequest request) {
        return Client.beanList(request);
    }

    /*
     * 分红送股
     * 描述：分红送股数据
     */
    @SneakyThrows
    public List<DividendEntity> dividend(DividendRequest request) {
        return Client.beanList(request);
    }

    /*
     * 沪深股通成份股
     * 描述：获取沪股通、深股通成分数据
     */
    @SneakyThrows
    public List<HsConstEntity> hsConst(HsConstRequest request) {
        return Client.beanList(request);
    }

    /*
     * 龙虎榜每日明细
     * 描述：龙虎榜每日交易明细
     */
    @SneakyThrows
    public List<TopListEntity> topList(TopListRequest request) {
        return Client.beanList(request);
    }

    /*
     * 龙虎榜机构明细
     * 描述：龙虎榜机构成交明细
     */
    @SneakyThrows
    public List<TopInstEntity> topInst(TopInstRequest request) {
        return Client.beanList(request);
    }

    /*
     * 股权质押统计数据
     * 描述：获取股票质押统计数据
     */
    @SneakyThrows
    public List<PledgeStatEntity> pledgeStat(PledgeStatRequest request) {
        return Client.beanList(request);
    }

    /*
     * 股权质押明细
     * 描述：获取股票质押明细数据
     */
    @SneakyThrows
    public List<PledgeDetailEntity> pledgeDetail(PledgeDetailRequest request) {
        return Client.beanList(request);
    }

    /*
     * 上市公司基本信息
     * 描述：获取上市公司基础信息，单次提取4500条，可以根据交易所分批提取
     */
    @SneakyThrows
    public List<StockCompanyEntity> stockCompany(StockCompanyRequest request) {
        return Client.beanList(request);
    }

    /*
     * 财经日历
     * 描述：获取全球财经日历、包括经济事件数据更新
     */
    @SneakyThrows
    public List<EcoCalEntity> ecoCal(EcoCalRequest request) {
        return Client.beanList(request);
    }

    /*
     * 期货期权tick数据
     * 描述：获取期权和期货的tick数据
     */
    @SneakyThrows
    public List<FtTickEntity> ftTick(FtTickRequest request) {
        return Client.beanList(request);
    }

    /*
     * 公募基金公司
     * 描述：获取公募基金管理人列表
     */
    @SneakyThrows
    public List<FundCompanyEntity> fundCompany(FundCompanyRequest request) {
        return Client.beanList(request);
    }

    /*
     * 公募基金净值
     * 描述：获取公募基金净值数据
     */
    @SneakyThrows
    public List<FundNavEntity> fundNav(FundNavRequest request) {
        return Client.beanList(request);
    }

    /*
     * 公募基金分红
     * 描述：获取公募基金分红数据
     */
    @SneakyThrows
    public List<FundDivEntity> fundDiv(FundDivRequest request) {
        return Client.beanList(request);
    }

    /*
     * 可转债转股价变动
     * 描述：获取可转债转股价变动
     */
    @SneakyThrows
    public List<CbPriceChgEntity> cbPriceChg(CbPriceChgRequest request) {
        return Client.beanList(request);
    }

    /*
     * 公募基金持仓数据
     * 描述：获取公募基金持仓数据，季度更新
     */
    @SneakyThrows
    public List<FundPortfolioEntity> fundPortfolio(FundPortfolioRequest request) {
        return Client.beanList(request);
    }

    /*
     * 可转债转股结果
     * 描述：获取可转债转股结果
     */
    @SneakyThrows
    public List<CbShareEntity> cbShare(CbShareRequest request) {
        return Client.beanList(request);
    }

    /*
     * IPO新股列表
     * 描述：获取新股上市列表数据
     */
    @SneakyThrows
    public List<NewShareEntity> newShare(NewShareRequest request) {
        return Client.beanList(request);
    }

    /*
     * 股票回购
     * 描述：获取上市公司回购股票数据
     */
    @SneakyThrows
    public List<RepurchaseEntity> repurchase(RepurchaseRequest request) {
        return Client.beanList(request);
    }

    /*
     * 概念股分类
     * 描述：获取概念股分类，目前只有ts一个来源，未来将逐步增加来源
     */
    @SneakyThrows
    public List<ConceptEntity> concept(ConceptRequest request) {
        return Client.beanList(request);
    }

    /*
     * 美股列表
     * 描述：获取美股列表信息
     */
    @SneakyThrows
    public List<UsBasicEntity> usBasic(UsBasicRequest request) {
        return Client.beanList(request);
    }

    /*
     * 概念股列表
     * 描述：获取概念股分类明细数据
     */
    @SneakyThrows
    public List<ConceptDetailEntity> conceptDetail(ConceptDetailRequest request) {
        return Client.beanList(request);
    }

    /*
     * 场内基金日线行情
     * 描述：获取场内基金日线行情，类似股票日行情
     */
    @SneakyThrows
    public List<FundDailyEntity> fundDaily(FundDailyRequest request) {
        return Client.beanList(request);
    }

    /*
     * 美股行情
     * 描述：获取美股行情（未复权），包括全部股票全历史行情，以及重要的市场和估值指标
     */
    @SneakyThrows
    public List<UsDailyEntity> usDaily(UsDailyRequest request) {
        return Client.beanList(request);
    }

    /*
     * 大盘指数每日指标
     * 描述：目前只提供上证综指，深证成指，上证50，中证500，中小板指，创业板指的每日指标数据
     */
    @SneakyThrows
    public List<IndexDailybasicEntity> indexDailybasic(IndexDailybasicRequest request) {
        return Client.beanList(request);
    }

    /*
     * 备用行情
     * 描述：获取备用行情，包括特定的行情指标
     */
    @SneakyThrows
    public List<BakDailyEntity> bakDaily(BakDailyRequest request) {
        return Client.beanList(request);
    }

    /*
     * 期货合约信息表
     * 描述：获取期货合约列表数据
     */
    @SneakyThrows
    public List<FutBasicEntity> futBasic(FutBasicRequest request) {
        return Client.beanList(request);
    }

    /*
     * 债券回购日行情
     * 描述：债券回购日行情
     */
    @SneakyThrows
    public List<RepoDailyEntity> repoDaily(RepoDailyRequest request) {
        return Client.beanList(request);
    }

    /*
     * 同花顺板块指数
     * 描述：获取同花顺板块指数。注：数据版权归属同花顺，如做商业用途，请主动联系同花顺，如需帮助请联系微信migedata 。
     */
    @SneakyThrows
    public List<ThsIndexEntity> thsIndex(ThsIndexRequest request) {
        return Client.beanList(request);
    }

    /*
     * 期货日线行情
     * 描述：期货日线行情数据
     */
    @SneakyThrows
    public List<FutDailyEntity> futDaily(FutDailyRequest request) {
        return Client.beanList(request);
    }

    /*
     * 同花顺板块指数行情
     * 描述：获取同花顺板块指数行情。注：数据版权归属同花顺，如做商业用途，请主动联系同花顺，如需帮助请联系微信migedata 。
     */
    @SneakyThrows
    public List<ThsDailyEntity> thsDaily(ThsDailyRequest request) {
        return Client.beanList(request);
    }

    /*
     * 每日成交持仓排名
     * 描述：获取每日成交持仓排名数据
     */
    @SneakyThrows
    public List<FutHoldingEntity> futHolding(FutHoldingRequest request) {
        return Client.beanList(request);
    }

    /*
     * 同花顺概念板块成分
     * 描述：获取同花顺概念板块成分列表注：数据版权归属同花顺，如做商业用途，请主动联系同花顺。
     */
    @SneakyThrows
    public List<ThsMemberEntity> thsMember(ThsMemberRequest request) {
        return Client.beanList(request);
    }

}